﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.pqeuler
    求解一阶初值连分式法
    改进欧拉公式以h为步长积分m步
    f计算微分方程组中各方程右端函数值的函数名。
    t积分起始点。
    h积分步长。
    n一阶微分方程组中方程个数，也是未知函数个数。
    yy[n]存放n个未知函数在起始点t处的函数值。返回n个未知函数在t+h处的函数值。
    eps控制精度要求。
    */

    public static unsafe string drive_pqeuler()
    {
        int i, j;
        double t, h, eps;
        double[] y = new double[2];

        t = 0.0;
        h = 0.1;
        eps = 0.0000001;
        y[0] = 1.0;
        y[1] = 0.0;

        string rs = "";
        rs = gl.html_table("求解一阶初值连分式法 y", y);

        gl.f_x_ya_n_da = pqeulerf;
        for (j = 1; j <= 10; j++)
        {
            gl.pqeuler(t, h, 2, y, eps);
            rs = gl.html_table("t=" + t + " y", y);
            t = t + h;
        }
        return rs;
    }

    private static unsafe void pqeulerf(double t, double* y, int n, double* d)
    {
        //t = t; n = n;
        d[0] = -y[1];
        d[1] = y[0];
        return;
    }
}